#include"os_type.h"

template<typename T>
void swap(T& x,T& y)
{
    T temp=x;
    x=y;
    y=temp;
}
//integer to string， num_str 保存的字符串，num数字，mod 进制
uint32 itos(char* num_str,uint32 num,uint32 mod)
{
    //只能转换2-36进制的整数
    if(mod<2 || mod>36) return 0;
    uint32 temp,length=0;
    //处理负数
    uint32 start=0;
    //进制转换
    while(num)
    {
        temp=num%mod;
        num/=mod;
        num_str[length]=  temp>9? temp-10+'A' : temp+'0';
        length++;
    }
    //处理num=0
    if(!length)
    {
        num_str[length]='0';
        length++;
    }
    //翻转字符串
    for(int i=start,j=length-1;i<j;i++,j--)
    {
        swap(num_str[i],num_str[j]);
    }
    num_str[length]='\0';
    return length;
}
void memset(void* memory,char value,int length)
{
    for(int i=0; i<length; i++)
    {
        ((char*)memory)[i]=value;
    }
}
char* strcpy(char* dest,const char* src)
{
    char* originDest=dest;
    while((*dest++ = *src++)!='\0');
    return originDest;
}
int strcmp(const char* str1,const char* str2)
{
    while(*str1 && *str2 && *str1==*str2)
    {
        str1++;
        str2++;
    }
    return *str1 - *str2;
}
int ceil(const int dividend,const int divisor)
{
    return (dividend+divisor-1)/divisor;
}
void memcpy(void* src,void* dst,uint32 length)
{
    for(uint32 i=0;i<length;i++)
    {
        ((char*)dst)[i]=((char*)src)[i];
    }
}
uint32 strlen(const char* str)
{
    uint32 length=0;
	while(*str++!='\0')length++;
	return length;
}
void appendStr(char* str, const char* appendStr) {
    // 找到 str 的末尾位置
    int len = 0;
    while (str[len] != '\0') {
        len++;
    }
    
    // 将 appendStr 拷贝到 str 的末尾
    int i = 0;
    while (appendStr[i] != '\0') {
        str[len + i] = appendStr[i];
        i++;
    }
    str[len + i] = '\0'; // 添加新的字符串的结束符
}
void removeStr(char* str, const char* substr) {
    int len_str = strlen(str);
    int len_substr = strlen(substr);
    
    // 如果 str 的长度小于 substr 的长度，直接返回，因为不可能有 substr 在 str 的末尾
    if (len_str < len_substr) {
        return;
    }
    
    // 检查 str 末尾是否有 substr
    bool found = true;
    for (int i = 0; i < len_substr; ++i) {
        if (str[len_str - len_substr + i] != substr[i]) {
            found = false;
            break;
        }
    }
    
    // 如果找到了 substr 在 str 末尾，则删除它
    if (found) {
        str[len_str - len_substr] = '\0';
    }
}